package com.minis.util;

/**
 * 用给定的模式匹配字符串
 * 模式格式: "xxx*", "*xxx", "*xxx*" 以及 "xxx*yyy"，*代表若干个字符
 */
public class PatternMatchUtils {
    public static boolean simpleMatch(String pattern, String str) {
        if (pattern == null || str == null) {
            return false;
        }

        // 判断模式中是否包含 *
        int firstIndex = pattern.indexOf('*');
        if (firstIndex == -1) {
            return pattern.equals(str);
        }

        // 首字符是否为 *
        if (firstIndex == 0) {
            // 只有 *，则通配全部串
            if (pattern.length() == 1) {
                return true;
            }
            // 尝试找下一个 *
            int nextIndex = pattern.indexOf('*', 1);
            // 若没有，则直接使用后缀判断
            if (nextIndex == -1) {
                return str.endsWith(pattern.substring(1));
            }
            // 截取两个 * 之间的部分
            String part = pattern.substring(1, nextIndex);
            // 精确匹配这部分
            int len = nextIndex - firstIndex - 1;
            if (len != 0 && len <= str.length() && part.equals(str.substring(0, len))) {
                return simpleMatch(pattern.substring(nextIndex), str.substring(len));
            } else if (len == 0) {
                return simpleMatch(pattern.substring(nextIndex), str);
            } else {
                return false;
            }
        }

        // 对于首字符非 * 的情况，前面的部分需要精确匹配，后面的部分递归调用
        return (str.length() >= firstIndex && pattern.substring(0, firstIndex).equals(str.substring(0, firstIndex)) &&
                simpleMatch(pattern.substring(firstIndex), str.substring(firstIndex)));

    }
}
